package bridge.carexample;

/**
 * https://liaoxuefeng.com/books/java/design-patterns/structural/bridge/
 * 将抽象部分与它的实现部分分离，使它们都可以独立地变化
 * 桥接模式就是为了避免直接继承带来的子类爆炸。
 * <p>
 * 在桥接模式中，首先把Car按品牌进行子类化，但是，每个品牌选择什么发动机，不再使用子类扩充，而是通过一个抽象的“修正”类，以组合的形式引入。
 * <p>
 * 使用桥接模式的好处在于，如果要增加一种引擎，只需要针对Engine派生一个新的子类，
 * 如果要增加一个品牌，只需要针对RefinedCar派生一个子类，任何RefinedCar的子类都可以和任何一种Engine自由组合，
 * 即一辆汽车的两个维度：品牌和引擎都可以独立地变化。
 */
public class Test {
    public static void main(String[] args) {
        RefinedCar benzCar = new BenzCar(new FuelEngine(), new LeatherSeat());
        benzCar.drive();

        System.out.println("-----------------------------------------------------");

        RefinedCar bydCar = new BydCar(new HybridEngine(), new FabricSeat());
        bydCar.drive();
    }
}